﻿using System;
using System.Collections.Generic;
using GSQ.BusinessEntities;
using GSQ.DataAccess;

namespace GSQ.BusinessLogic
{
    public class NcBL
    {
        public decimal Insert(NC value)
        {
            if (value.IsValid())
            {
                return new NcDA().Insert(value);
            }
            else
                throw new ArgumentException("La entidad no esta valida");
        }

        public decimal Update(NC newValue, NC oldValue)
        {
            if (newValue.IsValid())
            {
                return new NcDA().Update(newValue, oldValue);
            }
            else
                throw new ArgumentException("La entidad no esta valida");

        }

        public NC GetById(decimal id)
        {
            return new NcDA().GetById(id);
        }

        public List<NC> GetAll()
        {
            return new NcDA().GetAll();
        }

        public List<NC> GetByFechas(DateTime value1, DateTime value2)
        {
            return new NcDA().GetByFechas(value1.Date, value2.Date);
        }

        public List<NC> GetByIdCliente(decimal id)
        {
            return new NcDA().GetByCliente(id);
        }

        public List<NC> GetByCliente(string value)
        {
            return new NcDA().GetByCliente(value);
        }

        public List<NC> GetByNroFactura(decimal nroFactura)
        {
            return new NcDA().GetByNroFactura(nroFactura);
        }

        public List<NC> GetByIdFactura(decimal id)
        {
            return new NcDA().GetByIdFactura(id);
        }

        public List<NC> GetByNroDocumento(decimal nroDoc)
        {
            return new NcDA().GetByNroDocumento(nroDoc);
        }

        public bool Anular(NC entity)
        {
            if (!entity.ACTIVO)
                throw new Exception("Factura previamente anulada.");

            if (new FacturasPagosBL().GatByIdFactura(entity.ID).Count > 0 && !new UtilidadesBL().Get().ANULAR_FACTURAS_PAGADAS)
                throw new Exception("Factura no se puede anular ya que está pagada parcial o totalmente.\r\r Y la configuración de su compañia no admite este proceso bajo esta condición.");

            return new NcDA().Anular(entity);

        }
    }
}
